 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.ui.actions;

 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.ui.IActionBars;

 /**
  * An <code>ActionGroup</code> represents a group of actions
  * which are added to a context menu, or the action bars of a part, together.
  * The group is given a context which can be used to determine which actions
  * are added, and what their enabled state should be.
  * <p>
  * This class is intended only as a convenience for managing groups of actions.
  * Clients are not required to use this class in order to add actions to context
  * menus or action bars.
  * </p>
  * <p>
  * Clients should subclass this class and extend or override the appropriate fill methods.
  * </p>
  *
  * @since 2.0
  */
 public abstract class ActionGroup {

     /**
      * The action context, used to determine which actions are added,
      * and what their enabled state should be.
      */
     private ActionContext context;

     /**
      * Returns the context used to determine which actions are added,
      * and what their enabled state should be.
      */
     public ActionContext getContext() {
         return context;
     }

     /**
      * Sets the context used to determine which actions are added,
      * and what their enabled state should be.
      *
      * @param context the context to use
      */
     public void setContext(ActionContext context) {
         this.context = context;
     }

     /**
      * Adds the applicable actions to a context menu,
      * based on the state of the <code>ActionContext</code>.
      * <p>
      * The default implementation does nothing.
      * Subclasses may override or extend this method.
      * </p>
      *
      * @param menu the context menu manager
      */
     public void fillContextMenu(IMenuManager menu) {
         // do nothing
 }

     /**
      * Adds the applicable actions to a part's action bars,
      * including setting any global action handlers.
      * <p>
      * The default implementation does nothing.
      * Subclasses may override or extend this method.
      * </p>
      *
      * @param actionBars the part's action bars
      */
     public void fillActionBars(IActionBars actionBars) {
         // do nothing
 }

     /**
      * Updates the state of the actions added to the action bars,
      * including any global action handlers,
      * based on the state of the <code>ActionContext</code>.
      * <p>
      * The default implementation does nothing.
      * Subclasses may override or extend this method.
      * </p>
      */
     public void updateActionBars() {
         // do nothing
 }

     /**
      * This method is called by the user of an action group to signal that the group is
      * no longer needed. Subclasses typically implement this method to deregister
      * any listeners or to free other resources.
      * <p>
      * The default implementation calls <code>setContext(null)</code>.
      * Subclasses may extend this method.
      * </p>
      */
     public void dispose() {
         setContext(null);
     }
 }

